﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace Socket服务器
{
  public static   class SqlHelper
    {

        private static string connectionString = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

        private static  int _CmdTimeOut=10;

      /// <summary>
      /// 连接超时时间
      /// </summary>
        private  static  int CmdTimeOut
        {
            set
            {
                _CmdTimeOut = value;
            }
            get
            {
                return _CmdTimeOut;
            }
        }


        /// <summary>   
        /// 执行一个查询，并返回结果集   
        /// </summary>   
        /// <param name="sql">要执行的查询SQL文本命令</param>   
        /// <returns>返回查询结果集</returns>   
        public static DataTable ExecuteDataTable(string sql)   
        {   
            return ExecuteDataTable(sql, CommandType.Text, null);   
        }   
        /// <summary>   
        /// 执行一个查询,并返回查询结果   
        /// </summary>   
        /// <param name="sql">要执行的SQL语句</param>   
        /// <param name="commandType">要执行的查询语句的类型，如存储过程或者SQL文本命令</param>   
        /// <returns>返回查询结果集</returns>   
        public static  DataTable ExecuteDataTable(string sql, CommandType commandType)   
        {   
            return ExecuteDataTable(sql, commandType, null);   
        }   
        /// <summary>   
        /// 执行一个查询,并返回查询结果   
        /// </summary>   
        /// <param name="sql">要执行的SQL语句</param>   
        /// <param name="commandType">要执行的查询语句的类型，如存储过程或者SQL文本命令</param>   
        /// <param name="parameters">Transact-SQL 语句或存储过程的参数数组</param>   
        /// <returns></returns>   
        public static DataTable ExecuteDataTable(string sql, CommandType commandType,params  SqlParameter[] parameters)   
        {   
            DataTable data = new DataTable();//实例化DataTable，用于装载查询结果集   
            using (SqlConnection connection = new SqlConnection(connectionString))   
            {   
                using (SqlCommand command = new SqlCommand(sql, connection))   
                {
                    command.CommandTimeout = _CmdTimeOut;
                    command.CommandType = commandType;//设置command的CommandType为指定的CommandType   
                    //如果同时传入了参数，则添加这些参数   
                    if (parameters != null)   
                    {   
                        foreach (SqlParameter parameter in parameters)   
                        {   
                            command.Parameters.Add(parameter);   
                        }   
                    }   
                    //通过包含查询SQL的SqlCommand实例来实例化SqlDataAdapter   
                    SqlDataAdapter adapter = new SqlDataAdapter(command);   
  
                    adapter.Fill(data);//填充DataTable   
                }   
            }   
            return data;   
        }   
        /// <summary>   
        ///  获得一个SqlDataReader对象  
        /// </summary>   
        /// <param name="sql">要执行的查询SQL文本命令</param>   
        /// <returns></returns>   
        public static SqlDataReader ExecuteReader(string sql)   
        {   
            return ExecuteReader(sql, CommandType.Text, null);   
        }   
        /// <summary>   
        /// 获得一个SqlDataReader对象    
        /// </summary>   
        /// <param name="sql">要执行的SQL语句</param>   
        /// <param name="commandType">要执行的查询语句的类型，如存储过程或者SQL文本命令</param>   
        /// <returns></returns>   
        public static SqlDataReader ExecuteReader(string sql, CommandType commandType)   
        {   
            return ExecuteReader(sql, commandType, null);   
        }   
        /// <summary>   
        /// 获得一个SqlDataReader对象    
        /// </summary>   
        /// <param name="sql">要执行的SQL语句</param>   
        /// <param name="commandType">要执行的查询语句的类型，如存储过程或者SQL文本命令</param>   
        /// <param name="parameters">Transact-SQL 语句或存储过程的参数数组</param>   
        /// <returns></returns>   
        public static SqlDataReader ExecuteReader(string sql, CommandType commandType,params  SqlParameter[] parameters)   
        {   
            SqlConnection connection = new SqlConnection(connectionString);   
            SqlCommand command = new SqlCommand(sql, connection);   
            //如果同时传入了参数，则添加这些参数   
            if (parameters != null)   
            {   
                foreach (SqlParameter parameter in parameters)   
                {   
                    command.Parameters.Add(parameter);   
                }   
            }   
            connection.Open();   
            //CommandBehavior.CloseConnection参数指示关闭Reader对象时关闭与其关联的Connection对象   
            return command.ExecuteReader(CommandBehavior.CloseConnection);   
        }   
        /// <summary>   
        ///  获得查询数据中的第一个对象 
        /// </summary>   
        /// <param name="sql">要执行的查询SQL文本命令</param>   
        /// <returns></returns>   
        public static Object ExecuteScalar(string sql)   
        {   
            return ExecuteScalar(sql, CommandType.Text, null);   
        }   
        /// <summary>   
        ///  获得查询数据中的第一个对象 
        /// </summary>   
        /// <param name="sql">要执行的SQL语句</param>   
        /// <param name="commandType">要执行的查询语句的类型，如存储过程或者SQL文本命令</param>   
        /// <returns></returns>   
        public static Object ExecuteScalar(string sql, CommandType commandType)   
        {   
            return ExecuteScalar(sql, commandType, null);   
        }   
        /// <summary>   
        ///   获得查询数据中的第一个对象  
        /// </summary>   
        /// <param name="sql">要执行的SQL语句</param>   
        /// <param name="commandType">要执行的查询语句的类型，如存储过程或者SQL文本命令</param>   
        /// <param name="parameters">Transact-SQL 语句或存储过程的参数数组</param>   
        /// <returns></returns>   
        public static Object ExecuteScalar(string sql, CommandType commandType,params  SqlParameter[] parameters)   
        {   
            object result = null;   
            using (SqlConnection connection = new SqlConnection(connectionString))   
            {   
                using (SqlCommand command = new SqlCommand(sql, connection))   
                {
                    command.CommandTimeout = _CmdTimeOut;
                    command.CommandType = commandType;//设置command的CommandType为指定的CommandType   
                    //如果同时传入了参数，则添加这些参数   
                    if (parameters != null)   
                    {   
                        foreach (SqlParameter parameter in parameters)   
                        {   
                            command.Parameters.Add(parameter);   
                        }   
                    }   
                    connection.Open();//打开数据库连接   
                    result = command.ExecuteScalar();   
                }   
            }   
            return result;//返回查询结果的第一行第一列，忽略其它行和列   
        }   
        /// <summary>   
        /// 对数据库执行增删改操作   
        /// </summary>   
        /// <param name="sql">要执行的查询SQL文本命令</param>   
        /// <returns></returns>   
        public static int ExecuteNonQuery(string sql)   
        {   
            return ExecuteNonQuery(sql, CommandType.Text, null);   
        } 
  
        /// <summary>   
        /// 对数据库执行增删改操作   
        /// </summary>   
        /// <param name="sql">要执行的SQL语句</param>   
        /// <param name="commandType">要执行的查询语句的类型，如存储过程或者SQL文本命令</param>   
        /// <returns></returns>   
        public static int ExecuteNonQuery(string sql, CommandType commandType)   
        {   
            return ExecuteNonQuery(sql, commandType, null);   
        }   
        /// <summary>   
        /// 对数据库执行增删改操作   
        /// </summary>   
        /// <param name="sql">要执行的SQL语句</param>   
        /// <param name="commandType">要执行的查询语句的类型，如存储过程或者SQL文本命令</param>   
        /// <param name="parameters">Transact-SQL 语句或存储过程的参数数组</param>   
        /// <returns></returns>   
        public static int ExecuteNonQuery(string sql, CommandType commandType,params  SqlParameter[] parameters)   
        {   
            int count = 0;   
            using (SqlConnection connection = new SqlConnection(connectionString))   
            {   
                using (SqlCommand command = new SqlCommand(sql, connection))   
                {
                    command.CommandTimeout = _CmdTimeOut;
                    command.CommandType = commandType;//设置command的CommandType为指定的CommandType   
                    //如果同时传入了参数，则添加这些参数   
                    if (parameters != null)   
                    {   
                        foreach (SqlParameter parameter in parameters)   
                        {   
                            command.Parameters.Add(parameter);   
                        }   
                    }   
                    connection.Open();//打开数据库连接   
                    count = command.ExecuteNonQuery();   
                }   
            }   
            return count;//返回执行增删改操作之后，数据库中受影响的行数   
        }   
        /// <summary>   
        /// 返回当前连接的数据库中所有由用户创建的数据库   
        /// </summary>   
        /// <returns></returns>   
        public static DataTable GetTables()   
        {   
            DataTable data = null;   
            using (SqlConnection connection = new SqlConnection(connectionString))   
            {   
                connection.Open();//打开数据库连接   
                data = connection.GetSchema("Tables");   
            }   
            return data;   
        }   




        
        
    }
}



